home *** CD-ROM | disk | FTP | other *** search
/ By Popular Request 2.0 / By Popular Request 2.0 (Arsenal Computer).ISO / amiga_2 / catads2.lha / catads.c < prev    next >
C/C++ Source or Header  |  1995-06-10  |  5KB  |  258 lines

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <exec/memory.h>
  4.  
  5. #define NOTDLG
  6.  
  7. #include <proto/dlg.h>
  8. #include <dialog/dlg.h>
  9. #include <dialog/file.h>
  10. #include <dialog/msg.h>
  11.  
  12. char version[] = "$VER: CatADS 2.0 (7.6.95) by Guy Smith";
  13.  
  14. void back(char *);
  15. void catads(char *);
  16. void delback(char *);
  17. char *itoa(int);
  18. void rmdlgfile(char *, char *);
  19. void usage(void);
  20.  
  21. struct Library *DLGBase=NULL;
  22.  
  23.  
  24. void main(int argc, char *argv[])
  25. {
  26.  int i=1;
  27.  
  28.  DLGBase = OpenLibrary(DLGNAME,0);
  29.  if(!DLGBase) {
  30.   printf("ERR:  Can't open dlg.library!\n\n");
  31.   return;
  32.  }
  33.  if(argc==1) {
  34.   usage();
  35.  } else {
  36.   for (i=1 ; i<argc; i++) {
  37.     back(argv[i]);
  38.     catads(argv[i]);
  39.     delback(argv[i]);
  40.   }
  41.  }
  42.  if(DLGBase) CloseLibrary(DLGBase);
  43. }
  44.  
  45. void delback(char *area)
  46. {
  47.  char oname[80];
  48.  
  49.  strcpy(oname, "FILE:");
  50.  strcat(oname, area);
  51.  strcat(oname, "/file.dat.bak");
  52.  
  53.  remove(oname);
  54. }
  55.  
  56. void back(char *area)
  57. {
  58.  char oldname[80], newname[80];
  59.  struct QuickFile qf;
  60.  FILE *f1, *f2;
  61.  
  62.  strcpy(oldname, "FILE:");
  63.  strcat(oldname, area);
  64.  strcat(oldname, "/file.dat");
  65.  
  66.  strcpy(newname, oldname);
  67.  strcat(newname, ".bak");
  68.  
  69.  if ((f1 = fopen(oldname, "rb"))==NULL) {
  70.   printf("Can't open old file\n");
  71.   return;
  72.  }
  73.  
  74.  if ((f2 = fopen(newname, "wb"))==NULL) {
  75.   printf("Can't open new file\n");
  76.   return;
  77.  }
  78.  
  79.  while(!feof(f1)) {
  80.   fread(&qf, sizeof(struct QuickFile), 1, f1);
  81.   if(!feof(f1))
  82.    fwrite(&qf, sizeof(struct QuickFile), 1, f2);
  83.  }
  84.  
  85.  fclose(f1);
  86.  fclose(f2);
  87. }
  88.  
  89. void catads(char *area)
  90. {
  91.  struct Msg_Area ma;
  92.  char oldname[40], newname[40], tempd[40], buffer[80], tempf[40];
  93.  int number;
  94.  char mff[40], maf[40], mdf[40];
  95.  struct QuickFile *qf;
  96.  FILE *f1, *f2, *f3;
  97.  char ext[10];
  98.  
  99.  qf = (struct QuickFile *) malloc(sizeof(struct QuickFile));
  100.  if(!ReadArea(atoi(area),&ma,1)) {
  101.   printf("Cannot get info on that area!\n");
  102.   return;
  103.  }
  104.  
  105.  printf("Searching area:  %s\n", ma.Name);
  106.  strcpy(oldname, "FILE:");
  107.  strcat(oldname, area);
  108.  strcpy(tempd, oldname);
  109.  strcat(tempd, "/");
  110.  strcpy(tempf, tempd);
  111.  strcat(oldname, "/file.dat");
  112.  
  113.  strcpy(newname, oldname);
  114.  strcat(newname, ".bak");
  115.  
  116.  if(ma.path[0]!='\0') {
  117.   printf("[Note area has alternate file path.  Searching there.]\n");
  118.   strcpy(tempd, ma.path);
  119.  }
  120.  
  121.  if ((f1 = fopen(newname, "rb"))==NULL) {
  122.   printf("Can't open old file\n");
  123.   return;
  124.  }
  125.  
  126.  while(!feof(f1)) {
  127.   fread(qf, sizeof(struct QuickFile), 1, f1);
  128.   if(!feof(f1))
  129.   {
  130.     stcgfe(ext, qf->filename);
  131.     if(stricmp(ext, "ads")==0) {
  132.      printf("%s is a description file.  Aborting.\n", qf->filename);
  133.     } else {
  134.      number = qf->number;
  135.      strcpy(mdf, tempf);
  136.      strcat(mdf, itoa(number));
  137.      strcat(mdf, ".fd");
  138.      strcpy(mff, tempd);
  139.      AddPart(mff, qf->filename, sizeof(mff));
  140.      strcpy(maf, mff);
  141.      maf[strlen(maf)-3]='A';
  142.      maf[strlen(maf)-2]='D';
  143.      maf[strlen(maf)-1]='S';
  144.  
  145.      printf("  %s -- ",mff);
  146.      if ((f2 = fopen(maf, "r"))==NULL) {
  147.       printf("ADS file not found\n");
  148.      } else {
  149.       if ((f3 = fopen(mdf, "a"))==NULL) {
  150.        printf("Description file not found\n");
  151.        fclose(f2);
  152.        fclose(f3);
  153.       } else {
  154.        printf("ADS file found\n");
  155.        fputs("\n\n", f3);
  156.        while(!feof(f2)) {
  157.         fgets(buffer, sizeof(buffer), f2);
  158.         if(!feof(f2))
  159.          fputs(buffer, f3);
  160.        }
  161.        fclose(f2);
  162.        fclose(f3);
  163.        rmdlgfile(area, maf);
  164.  
  165.       }
  166.      }
  167.     }
  168.   }
  169.  }
  170.  
  171.  fclose(f1);
  172.  free(qf);
  173. }
  174.  
  175. void rmdlgfile(char *area, char *fname)
  176. {
  177.  char maf[40], mfdatf[40], tempd[40], comment[80];
  178.  struct FileLock *lock;
  179.  struct FileInfoBlock *fib_ptr;
  180.  struct QuickFile qf;
  181.  
  182.  stcgfn(maf, fname);
  183.  
  184.  strcpy(qf.filename, maf);
  185.  
  186.  strcpy(mfdatf, "FILE:");
  187.  strcat(mfdatf, area);
  188.  strcpy(tempd, mfdatf);
  189.  strcat(tempd, "/");
  190.  strcat(mfdatf, "/file.dat");
  191.  
  192.  fib_ptr = (struct FileInfoBlock *)
  193.   AllocMem( sizeof( struct FileInfoBlock ),
  194.   MEMF_PUBLIC | MEMF_CLEAR );
  195.  
  196.  if( fib_ptr == NULL )
  197.  {
  198.   printf("Not enough memory!\n");
  199.   return;
  200.  }
  201.  
  202.  lock = (struct FileLock *) Lock( fname, SHARED_LOCK );
  203.  
  204.  if( lock == NULL )
  205.  {
  206.   printf("Could not lock the ads file!\n");
  207.   FreeMem( fib_ptr, sizeof( struct FileInfoBlock ) );
  208.   return;
  209.  }
  210.  
  211.  if( Examine( lock, fib_ptr ) )
  212.  {
  213.   strcpy(comment, fib_ptr->fib_Comment);
  214.  }
  215.  
  216.  UnLock(lock);
  217.  FreeMem( fib_ptr, sizeof( struct FileInfoBlock ) );
  218.  
  219.  if(!remove(comment)) printf("Removed .fd file describing ads file\n");
  220.  else printf("Couldn't remove .fd file describing ads file\n");
  221.  
  222.  if(!remove(fname)) printf("Removed ads file\n");
  223.  else printf("Couldn't remove ads file\n");
  224.  
  225.  if(!DeleteStruct(mfdatf, &qf, sizeof(struct QuickFile), 36)) printf("Deleted file.dat entry\n");
  226.  else printf("Could not delete file.dat entry.\n");
  227.  
  228.  return;
  229. }
  230.  
  231.  
  232.  
  233. char *itoa(int zahl)
  234. {
  235.    static char res[10];
  236.    char c, *dest = res;
  237.    int maxpot = 1000000, flag = 0;
  238.  
  239.    while (maxpot >= 1)
  240.    {
  241.       c = zahl / maxpot + '0';
  242.       if ((c != '0') || (maxpot == 1) || flag)
  243.       {
  244.          flag = 1;
  245.          *dest++ = c;
  246.       }
  247.       zahl %= maxpot;
  248.       maxpot /= 10;
  249.    }
  250.    *dest = '\0';
  251.    return res;
  252. }
  253.  
  254. void usage(void) {
  255.  printf("%s\n", version);
  256.  printf("USAGE: CatADS <AREA> [AREA] ...\n");
  257.  printf("EXAMPLE: CatADS 100 101 102\n");
  258. }